/*
 * iPuertaSalida.cpp
 *
 *  Created on: 05/07/2014
 *      Author: nicolas
 */

#include "iPuertaSalida.h"
#include <syslog.h>
#include <stdio.h>

iPuertaSalida::iPuertaSalida(int numeroPuerta, int id) {
	this->id = id;
	this->puerta = numeroPuerta;
	this->colaSistema = new ColaMensajes(RUTA, COLASISTEMA);
	this->colaRespuesta = new ColaInterfaz(RUTA, COLARECIBO_CLI);
}

void iPuertaSalida::confirmarSalida() {
	long int dest = rpc.consultarIdPuerta(puerta, Tipos::PUERTA_SALIDA);
//	long int dest = idServer.idPuerta(puerta, Tipos::PUERTA_SALIDA);
	MENSAJE msg;
	msg.destinatario = id;
	msg.origen = id;
	msg.destinatarioFinal = dest;
	msg.tipo = Tipos::MSJ_SALIR_DE_PARQUE;
	colaSistema->enviar(&msg, TAM_MENSAJE);
	syslog(LOG_INFO,
			"Se envio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);

	//colaRespuesta->recibir(&msg, TAM_MENSAJE, id);
	colaRespuesta->recibirMensaje(msg, Tipos::MSJ_CONFIRMAR_SALIDA_DE_PARQUE , id);

	if (msg.tipo != Tipos::MSJ_CONFIRMAR_SALIDA_DE_PARQUE)
		syslog(LOG_ERR,
				"Error de tipo de mensaje esperado, esperado: %i, recibido: %i",
				(int) Tipos::MSJ_CONFIRMAR_SALIDA_DE_PARQUE, (int) msg.tipo);
	syslog(LOG_INFO,
			"Se recibio el mensaje: destinatario: %li, origen: %li, id: %i, respuesta: %i",
			msg.destinatario, msg.origen, msg.id, msg.respuesta);

	msg.destinatario = id;
	msg.origen = id;
	msg.destinatarioFinal = -3;
	msg.tipo = Tipos::MSJ_NORMAL;
	msg._ipc.op_ipc = TIPO_FINALIZAR;
	colaSistema->enviar(&msg, TAM_MENSAJE);
}
